import configparser
import os
import sys

CONFIG_FILE = 'config.ini'
CONFIG_SECTION = 'GitLab'

def get_config():
    """
    从 config.ini 读取配置。
    如果文件或值丢失，它会提示用户并创建/更新文件。
    """
    config = configparser.ConfigParser()
    
    # 检查配置文件是否存在且包含所需的所有键
    if os.path.exists(CONFIG_FILE):
        config.read(CONFIG_FILE, encoding='utf-8')
        if (config.has_section(CONFIG_SECTION) and
            config.has_option(CONFIG_SECTION, 'url') and
            config.get(CONFIG_SECTION, 'url') and
            config.has_option(CONFIG_SECTION, 'token') and
            config.get(CONFIG_SECTION, 'token') and
            config.has_option(CONFIG_SECTION, 'username') and
            config.get(CONFIG_SECTION, 'username')):
            
            # 一切正常，返回配置值
            return {
                'url': config.get(CONFIG_SECTION, 'url'),
                'token': config.get(CONFIG_SECTION, 'token'),
                'username': config.get(CONFIG_SECTION, 'username')
            }

    # 如果程序运行到这里，说明配置文件不完整或不存在，需要提示用户输入。
    print("--- GitLab 工具集首次配置 ---")
    print("您需要配置一次 GitLab 信息，后续将自动保存和读取。")
    print("-" * 30)
    
    # 从现有文件中读取值（如果存在），以便用户可以只更新缺失的部分
    existing_url = config.get(CONFIG_SECTION, 'url', fallback='')
    existing_token = config.get(CONFIG_SECTION, 'token', fallback='')
    existing_username = config.get(CONFIG_SECTION, 'username', fallback='')

    def prompt_for_input(prompt_text, default_value):
        """带有默认值的输入提示"""
        while True:
            response = input(f"{prompt_text} [{default_value}]: ") or default_value
            if response:
                return response
            else:
                print("错误：此项不能为空，请重新输入。")

    gitlab_url = prompt_for_input("请输入 GitLab URL", existing_url or "http://example.gitlab.com")
    private_token = prompt_for_input("请输入您的 GitLab 私人访问令牌", existing_token)
    assignee_username = prompt_for_input("请输入要筛选的负责人用户名", existing_username)

    if not config.has_section(CONFIG_SECTION):
        config.add_section(CONFIG_SECTION)
        
    config.set(CONFIG_SECTION, 'url', gitlab_url)
    config.set(CONFIG_SECTION, 'token', private_token)
    config.set(CONFIG_SECTION, 'username', assignee_username)

    try:
        with open(CONFIG_FILE, 'w', encoding='utf-8') as configfile:
            config.write(configfile)
        print(f"\n配置已成功保存到 {CONFIG_FILE} 文件中。")
    except Exception as e:
        print(f"\n错误：无法写入配置文件 {CONFIG_FILE}。请检查权限。错误信息: {e}")
        sys.exit(1)
    
    print("-" * 30)
    
    return {
        'url': gitlab_url,
        'token': private_token,
        'username': assignee_username
    }

if __name__ == '__main__':
    # 用于直接测试此模块
    print("正在测试配置管理器...")
    config_data = get_config()
    print("\n获取到的配置:")
    print(f"  URL: {config_data['url']}")
    print(f"  Token: {'*' * len(config_data['token'])}")
    print(f"  Username: {config_data['username']}")
    print("\n再次调用 get_config() 应该直接从文件读取...")
    config_data = get_config()
    print("成功！") 